package pare.servidor.rn;

import java.rmi.RemoteException;
import java.util.Timer;
import java.util.TimerTask;

import pare.servidor.so.SO_SalaRMI;

public class RN_Relogio extends TimerTask {
	private SO_SalaRMI salaJogo;
	private int relogio;
	static Timer clk = new Timer();
	private String controle;
	private Object objetoTemporizado;

	public RN_Relogio(int valorInicial, SO_SalaRMI salaJogo, RN_Sala objetoTemporizado){
		this.salaJogo = salaJogo;
		relogio = valorInicial;
		clk.scheduleAtFixedRate(this, 0, 1000);
		objetoTemporizado.getClass().cast(objetoTemporizado);
		this.objetoTemporizado = objetoTemporizado;
	}
	
	public RN_Relogio(int valorInicial, SO_SalaRMI salaJogo, RN_Rodada objetoTemporizado){
		this.salaJogo = salaJogo;
		relogio = valorInicial;
		clk.scheduleAtFixedRate(this, 0, 1000);
		objetoTemporizado.getClass().cast(objetoTemporizado);
		this.objetoTemporizado = objetoTemporizado;
	}
	
	public void run() {
		try {
			salaJogo.notificaObservadores("atualiza" + getControle());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		relogio--;
		if(relogio == -1){
			try {
				this.cancel();
				if(objetoTemporizado.getClass().isInstance(RN_Sala.getInstance()))
					((RN_Sala) objetoTemporizado).getInstance().trataInterrupcao();
				else
					((RN_Rodada) objetoTemporizado).getInstance().trataInterrupcao();					
			} catch (RemoteException re) {
				re.printStackTrace();
			}
		}	
	}

	public int getRelogio(){
		return relogio;
	}
	
	public void setControle(String controle){
		this.controle = controle;
	}
	
	private String getControle(){
		return this.controle;
	}
}
